package malagaAcoge.controller.daos;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import malagaAcoge.model.entities.Experiencialaboral;
import malagaAcoge.model.entities.Familiar;
import malagaAcoge.model.entities.Formacion;
import malagaAcoge.model.entities.Idioma;
import malagaAcoge.model.entities.Informacionfamiliar;
import malagaAcoge.model.entities.Perfillaboral;
import malagaAcoge.utils.JPAUtils;

public class PerfilLaboralDao {
	private static JPAUtils jpaUtils;
	protected static EntityManager em;

	public PerfilLaboralDao() {
		jpaUtils = new JPAUtils();

	}

	public static void createPerfillaboral(Perfillaboral perfilLaboral) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(perfilLaboral);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createPerfillaboral:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

	public static void updatePerfillaboral(Perfillaboral perfilLaboral) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(perfilLaboral);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo updatePerfilLaboral:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void createIdioma(Idioma idioma) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(idioma);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo createIdioma:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void createExperiencia(Experiencialaboral exp) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(exp);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo createExperiencia:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void createFormacion(Formacion formacion) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(formacion);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo createFormacion:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteIdioma(int idIdioma) {
		try {
			em = jpaUtils.getEntityManager();
			Idioma idioma = em.find(Idioma.class, idIdioma);
			em.getTransaction().begin();
			em.remove(idioma);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo deleteIdioma:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteExperiencia(int idExperiencia) {
		try {
			em = jpaUtils.getEntityManager();
			Experiencialaboral exp = em.find(Experiencialaboral.class,
					idExperiencia);
			em.getTransaction().begin();
			em.remove(exp);
			em.getTransaction().commit();

		} catch (Exception e) {
			System.out.println("Error en metodo deleteExperiencia:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteFormacion(int idFormacion) {
		try {
			em = jpaUtils.getEntityManager();
			Formacion formacion = em.find(Formacion.class, idFormacion);
			em.getTransaction().begin();
			em.remove(formacion);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo deleteFormacion:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static Perfillaboral findPerfilByExpediente(int idExpediente) {
		Perfillaboral perfilLaboral = null;
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Perfillaboral) FROM Perfillaboral perfillaboral WHERE perfillaboral.expedienteBean.idExpediente= :valor")
					.setParameter("valor", idExpediente);
			perfilLaboral = (Perfillaboral) q.getSingleResult();
		}catch (NoResultException e) {
			System.out.println("No hay datos de informacion familiar.");
		} 
		catch (Exception e) {
			System.out.println("Error en metodo findPerfilByExpediente");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return perfilLaboral;
	}
	public static List<Idioma> findIdiomasByperfil(
			int idExpediente) {
		List<Idioma> idiomas = new ArrayList<Idioma>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Idioma) FROM Idioma idioma WHERE idioma.perfillaboral.idPerfilLaboral= :valor")
					.setParameter("valor", idExpediente);
			idiomas = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("No hay idiomas.");
		} 
		catch (Exception e) {
			System.out.println("Error en metodo findIdiomasByperfil");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return idiomas;
	}
	
	public static List<Formacion> findFormacionsByperfil(
			int idExpediente) {
		List<Formacion> formacions = new ArrayList<Formacion>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Formacion) FROM Formacion formacion WHERE formacion.perfillaboral.idPerfilLaboral= :valor")
					.setParameter("valor", idExpediente);
			formacions = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("No hay formacions.");
		} 
		catch (Exception e) {
			System.out.println("Error en metodo findFormacionsByperfil");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return formacions;
	}
	public static List<Experiencialaboral> findExperiencialaboralsByperfil(
			int idExpediente) {
		List<Experiencialaboral> experiencialaborals = new ArrayList<Experiencialaboral>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em
					.createQuery(
							"SELECT OBJECT(Experiencialaboral) FROM Experiencialaboral experiencialaboral WHERE experiencialaboral.perfillaboral.idPerfilLaboral= :valor")
					.setParameter("valor", idExpediente);
			experiencialaborals = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("No hay experiencialaborals.");
		} 
		catch (Exception e) {
			System.out.println("Error en metodo findExperiencialaboralsByperfil");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return experiencialaborals;
	}

	
}
